ホームに戻る
出典 :
WPF4.5入門 その46 「WPFのイベントシステム」 - かずきのBlog@hatena ポインター入力の処理 - Windows apps | Microsoft Learn キーボード イベント - Windows apps | Microsoft Learn
目次 :

WPFのイベントシステム : ルーティングイベント

WPFにおいては、コントロールの階層構造における親(外側の)要素から子(内側の)要素、およびその逆方向のイベント伝播が発生する。
これにより、発生元(子)のコントロールに限らず、親コントロールでもイベントを捕捉することができる。

Preview イベント

親要素から子要素へ伝わるトンネルイベントは、いずれも Preview から始まっている。それ以外はバブルイベントで、子要素から親要素へ伝わる。
この Preview イベントは、キーやマウスを操作した際に発生するイベント(以下「本イベント」)と対になっており、本イベントの直前に発生する。
例えば、キーを押下した際に発生する KeyDown イベントには、対応する PreviewKeyDown イベントが用意されており、
PreviewKeyDown がイベント発生元まで伝播した後に KeyDown が逆方向に伝播する。


なお、イベント引数( KeyDown イベントであれば KeyEventArgs 型)のプロパティ Handled をいずれかのハンドラ内で true にセットすると、
イベントが「処理済」となり、後続のイベントは発生しなくなる。
(上図の例では(2)内で KeyEventArgs.Handled = true とすると、(3)~(6)のイベントが発生しなくなる。)

捕捉できない操作

コントロールによっては、矢印、Tab、Enter、Escなどのキーは押されても KeyDown 、KeyUp のイベントが発生しない。
(例えば、TextBox の場合矢印キーが押下されても捕捉できない。)
PreviewKeyDown 、PreviewKeyUp ではこれらを捕捉することができる。